#! user/bin/python
# -*- coding: utf-8 -*-

"""
Created on 2021/8/17 16:12

@File: 简单的服务器_echo-server.py
@Author: LT
@Description: 通常称类似的监听连接的程序为服务器，因为它提供了一个可以连接到网络上某个给定的机器和端口的服务
"""
import time
from socket import *

myHost = ""                                     # 空代表本主机即localhost
myPort = 50007                                  # 监听一个非保留的（0到1023为保留）端口号，此处选50007

# 实例化套接字最多可以指定3个参数：一个地址族（默认为socket.AF_INET）；
# 一个是流套接字（默认为socket.SOCK_STREAM）；
# 还有一个是协议（默认为0，即TCP，也可以不用设；或者选数据报套接字：sock.SOCK_DGRAM）
# 所以默认的都不用设置了，下面其实可以不用填AF_INET, SOCK_STREAM这些参数的
sockobj = socket(AF_INET, SOCK_STREAM)          # 创建一个使用TCP协议的socket实例
sockobj.bind((myHost, myPort))                  # 绑定服务器端口号
sockobj.listen(5)                               # 设定最多可有多少个连接在队列中等待接纳，到达这个数量后将开始拒绝连接

while True:
    print("服务器正在监听...")
    connection, address = sockobj.accept()      # 等待下个客户端连接上来,connection代表新的套接字，address是客户端的IP地址
    print(f"服务器已连接客户端--->客户端地址是：{address}，套接字是：{connection}")
    while True:
        data = connection.recv(1024)            # 从客户端的端口中读取1024字节大小的数据，调用的是C语言中的recv和send库接口
        print(f"服务器收到客户端--->{address}的信息{data}")
        if not data:
            break
        connection.send(b'server echo to you--->' + data)
    connection.close()
    print(f"服务器检测到客户端--->{address}<---已断开连接")
